home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / share / aclocal / libast.m4 < prev    next >
M4 Source File  |  2005-10-18  |  22KB  |  689 lines

  1. dnl#####################################################################
  2. dnl# Autoconf m4 macros for LibAST
  3. dnl# $Id: libast.m4,v 1.11 2004/09/14 15:46:43 mej Exp $
  4. dnl#####################################################################
  5.  
  6. dnl#
  7. dnl# Check for LibAST and support components
  8. dnl#    - arg 1 is the env variable to set
  9. dnl#    - arg 2 is the LIBS variable to use
  10. dnl#
  11. AC_DEFUN([AST_CHECK_LIBAST], [
  12.     AC_CHECK_PROG(LIBAST_CONFIG, libast-config, libast-config, false)
  13.     if test "$LIBAST_CONFIG" = "false"; then
  14.         $1=0
  15.     else
  16.         $1=1
  17.         CPPFLAGS="$CPPFLAGS `$LIBAST_CONFIG --cppflags`"
  18.         LDFLAGS="$LDFLAGS `$LIBAST_CONFIG --ldflags`"
  19.     fi
  20.     AC_CHECK_HEADERS(libast.h, [
  21.         AC_CHECK_LIB(ast, libast_malloc, $1=1, [ AC_CHECK_LIB(ast, spifmem_malloc, $1=0, ${$2}) ]
  22.     ], $1=0)
  23.  
  24.     if test "${$1}" -ne "1"; then
  25.         echo "ERROR:  You need the LibAST package to build Eterm.  If you already have it,";
  26.         echo "        you may have it installed in a strange place, or you may need to run";
  27.         echo "        /sbin/ldconfig.  If you don't have it, I can download it for you.";
  28.         echo "        Shall I retrieve and build LibAST now (y/n)?";
  29.         read ANS
  30.         if test "x$ANS" = "xy" -o "x$ANS" = "xyes" -o "x$ANS" = "xY" -o "x$ANS" = "xYES"; then
  31.             # Download from CVS server
  32.             CVSROOT=":pserver:anonymous@cvs.enlightenment.sourceforge.net:/cvsroot/enlightenment"
  33.             test -f $HOME/.cvspass || touch $HOME/.cvspass
  34.             grep $CVSROOT $HOME/.cvspass >/dev/null 2>&1 || cvs -d $CVSROOT login
  35.             cvs -z3 -d $CVSROOT co -d libast eterm/libast
  36.             (cd libast && ./autogen.sh $ac_configure_args && make install && cd .. && rm -rf libast)
  37.             if test $? -ne 0; then
  38.                 echo 'ERROR:  Unable to auto-get libast, sorry.' 1>&2
  39.                 exit 1
  40.             fi
  41.             $1=1
  42.             AC_CHECK_PROG(LIBAST_CONFIG, libast-config, libast-config, false)
  43.             test "$LIBAST_CONFIG" = "false" && $1=0
  44.         fi
  45.     fi
  46.     if test "${$1}" -eq "1"; then
  47.         if test ! -z "$LIBAST_CONFIG"; then
  48.             $2="-last ${$2}"
  49.             AC_DEFINE(HAVE_LIBAST, 1, [Define if the LibAST library is present.])
  50.             test "$prefix" = "NONE" && prefix="`$LIBAST_CONFIG --prefix`"
  51.             SUPPORT_FLAGS="`$LIBAST_CONFIG --support`"
  52.             for i in $SUPPORT_FLAGS ; do
  53.                 case $i in
  54.                     MMX)
  55.                         AC_DEFINE(LIBAST_MMX_SUPPORT, 1, [Defined if LibAST has MMX support.])
  56.                         ;;
  57.                     X11)
  58.                         AC_DEFINE(LIBAST_X11_SUPPORT, 1, [Defined if LibAST has X11 support.])
  59.                         ;;
  60.                     Imlib2)
  61.                         AC_DEFINE(LIBAST_IMLIB2_SUPPORT, 1, [Defined if LibAST has Imlib2 support.])
  62.                         ;;
  63.                 esac
  64.             done
  65.         fi
  66.     fi
  67. ])
  68.  
  69. dnl#
  70. dnl# LibAST macro for determining integer types by size
  71. dnl#
  72. AC_DEFUN([AST_SIZE_TYPE], [
  73.     BIT_SIZE=[$1]
  74.     BYTE_SIZE=`expr $BIT_SIZE '/' 8`
  75.     case $BYTE_SIZE in
  76.         $ac_cv_sizeof_char)       eval INT_${BIT_SIZE}_TYPE=char ;;
  77.         $ac_cv_sizeof_short)      eval INT_${BIT_SIZE}_TYPE=short ;;
  78.         $ac_cv_sizeof_int)        eval INT_${BIT_SIZE}_TYPE=int ;;
  79.         $ac_cv_sizeof_long)       eval INT_${BIT_SIZE}_TYPE=long ;;
  80.         $ac_cv_sizeof_long_long)  eval INT_${BIT_SIZE}_TYPE="'long long'" ;;
  81.     esac
  82.     test -z "`eval echo '$'INT_${BIT_SIZE}_TYPE`" && eval INT_${BIT_SIZE}_TYPE=long
  83. ])
  84.  
  85. dnl#
  86. dnl# LibAST macro for determining regexp support
  87. dnl#    - arg 1 is the name of the env var to use
  88. dnl#
  89. AC_DEFUN([AST_REGEXP_SUPPORT], [
  90.     if test "${$1}" != "no"; then
  91.         if test "${$1}" = "pcre" -o "${$1}" = "yes" ; then
  92.             GOT_PCRE_HEADER=0
  93.             GOT_PCRE_LIB=0
  94.             AC_CHECK_HEADERS(pcre.h pcre/pcre.h, [
  95.                                  GOT_PCRE_HEADER=1
  96.                                  break
  97.                              ])
  98.             AC_SEARCH_LIBS(pcre_compile, pcre, [GOT_PCRE_LIB=1])
  99.             if test $GOT_PCRE_HEADER -eq 1 -a $GOT_PCRE_LIB -eq 1 ; then
  100.                 AC_DEFINE(LIBAST_REGEXP_SUPPORT_PCRE, 1, [Build LibAST with PCRE support.])
  101.                 LIBAST_REGEXP_SUPPORT="regexp-pcre"
  102.                 $1="pcre"
  103.             else
  104.                 $1="yes"
  105.             fi
  106.         fi
  107.         if test "${$1}" = "posix" -o "${$1}" = "yes" ; then
  108.             GOT_POSIXREGEXP_HEADER=0
  109.             GOT_POSIXREGEXP_LIB=0
  110.             AC_CHECK_HEADERS(regex.h, [
  111.                                  GOT_POSIXREGEXP_HEADER=1
  112.                                  break
  113.                              ])
  114.             AC_SEARCH_LIBS(regcomp, posix regexp regex re, [GOT_POSIXREGEXP_LIB=1])
  115.             if test $GOT_POSIXREGEXP_HEADER -eq 1 -a $GOT_POSIXREGEXP_LIB -eq 1 ; then
  116.                 AC_DEFINE(LIBAST_REGEXP_SUPPORT_POSIX, 1, [Build LibAST with POSIX-style regexp support.])
  117.                 LIBAST_REGEXP_SUPPORT="regexp-posix"
  118.                 $1="posix"
  119.             else
  120.                 $1="yes"
  121.             fi
  122.         fi
  123.         if test "${$1}" = "bsd" -o "${$1}" = "yes" ; then
  124.             GOT_BSD_HEADER=0
  125.             GOT_BSD_LIB=0
  126.             AC_CHECK_HEADERS(regex.h, [
  127.                                  GOT_BSD_HEADER=1
  128.                                  break
  129.                              ])
  130.             AC_SEARCH_LIBS(re_comp, bsd ucb regexp regex re, [GOT_BSD_LIB=1])
  131.             if test $GOT_BSD_HEADER -eq 1 -a $GOT_BSD_LIB -eq 1 ; then
  132.                 AC_DEFINE(LIBAST_REGEXP_SUPPORT_BSD, 1, [Build LibAST with BSD-style regexp support.])
  133.                 LIBAST_REGEXP_SUPPORT="regexp-bsd"
  134.                 $1="bsd"
  135.             else
  136.                 $1="yes"
  137.             fi
  138.         fi
  139.         if test "${$1}" = "yes" ; then
  140.             LIBAST_REGEXP_SUPPORT=""
  141.             $1="no"
  142.         fi
  143.     else
  144.         LIBAST_REGEXP_SUPPORT=""
  145.         $1="no"
  146.     fi
  147.     AC_SUBST(LIBAST_REGEXP_SUPPORT)
  148. ])
  149.  
  150. dnl#
  151. dnl# LibAST macro for X11 support
  152. dnl#
  153. AC_DEFUN([AST_X11_SUPPORT], [
  154.     AC_PATH_XTRA
  155.     if test ! -z "$X_CFLAGS"; then
  156.         if test -z "$CPPFLAGS"; then
  157.             CPPFLAGS="$X_CFLAGS"
  158.         else
  159.             CPPFLAGS="$CPPFLAGS $X_CFLAGS"
  160.         fi
  161.     fi
  162.     if test ! -z "$X_LIBS"; then
  163.         if test -z "$LDFLAGS"; then
  164.             LDFLAGS="$X_LIBS"
  165.         else
  166.             LDFLAGS="$LDFLAGS $X_LIBS"
  167.         fi
  168.     fi
  169.     LIBAST_X11_SUPPORT=""
  170.     if test "x$no_x" != "xyes"; then
  171.         AC_CHECK_LIB(X11, XOpenDisplay, [
  172.                          LIBAST_X11_SUPPORT="X11"
  173.                          GRLIBS="-lX11"
  174.                          AC_DEFINE(LIBAST_X11_SUPPORT, 1, [Define for X11 support.])
  175.                      ])
  176.     fi
  177.     AC_SUBST(LIBAST_X11_SUPPORT)
  178. ])
  179.  
  180. dnl#
  181. dnl# LibAST macro for Imlib2 support
  182. dnl#
  183. AC_DEFUN([AST_IMLIB2_SUPPORT], [
  184.     AC_ARG_WITH(imlib,
  185.     [  --with-imlib[=DIR]      compile with Imlib2 support (default)],
  186.     [
  187.         if test "$withval" != "no"; then 
  188.             if test "$withval" != "yes"; then
  189.                 CPPFLAGS="$CPPFLAGS -I${withval}/include"
  190.                 LDFLAGS="$LDFLAGS -L${withval}/lib"
  191.             fi
  192.             USE_IMLIB=1
  193.         else
  194.             USE_IMLIB=0
  195.         fi
  196.     ], [
  197.         USE_IMLIB=1
  198.     ])
  199.     LIBAST_IMLIB2_SUPPORT=""
  200.     if test $USE_IMLIB -eq 1 ; then
  201.         AC_CHECK_PROG(IMLIB2_CONFIG, imlib2-config, imlib2-config)
  202.             if test "x$IMLIB2_CONFIG" != "x"; then
  203.                 GRLIBS="`$IMLIB2_CONFIG --libs`"
  204.                 CFLAGS="$CFLAGS `$IMLIB2_CONFIG --cflags`"
  205.             else
  206.                 AC_CHECK_LIB(m, pow, LIBS="-lm $LIBS")
  207.                 AC_CHECK_LIB(dl, dlopen, LIBS="-ldl $LIBS")
  208.                 AC_CHECK_LIB(freetype, FT_Init_FreeType, GRLIBS="-lfreetype $GRLIBS", , $GRLIBS)
  209.                 AC_CHECK_LIB(Imlib2, imlib_create_image, [
  210.                                 GRLIBS="-lImlib2 $GRLIBS"
  211.                                 AC_DEFINE(LIBAST_IMLIB2_SUPPORT, 1, [Define for Imlib2 support.])
  212.                                 LIBAST_IMLIB2_SUPPORT="Imlib2"
  213.                      ], [
  214.                          AC_WARN(*** Imlib2 support has been disabled because Imlib2 ***)
  215.                          AC_WARN(*** was not found or could not be linked.           ***)
  216.                      ], $GRLIBS)
  217.             fi
  218.     fi
  219.     AC_SUBST(LIBAST_IMLIB2_SUPPORT)
  220. ])
  221.  
  222. dnl#
  223. dnl# LibAST macro for MMX support
  224. dnl#
  225. AC_DEFUN([AST_MMX_SUPPORT], [
  226.     AC_MSG_CHECKING(for MMX support)
  227.     HAVE_MMX=""
  228.     AC_ARG_ENABLE(mmx, [  --enable-mmx            enable MMX assembly routines], [
  229.                      test x$enableval = xyes && HAVE_MMX="yes"
  230.                   ], [
  231.                      if test x$build_os = xlinux-gnu; then
  232.                          grep mmx /proc/cpuinfo >/dev/null 2>&1 && HAVE_MMX="yes"
  233.                      fi
  234.                   ])
  235.     LIBAST_MMX_SUPPORT=""
  236.     if test -n "$HAVE_MMX"; then
  237.         AC_MSG_RESULT(yes)
  238.         AC_DEFINE(LIBAST_MMX_SUPPORT, 1, [Define for MMX support.])
  239.         LIBAST_MMX_SUPPORT="MMX"
  240.     else
  241.         AC_MSG_RESULT(no)
  242.     fi
  243.     AC_SUBST(LIBAST_MMX_SUPPORT)
  244. ])
  245.  
  246. dnl#
  247. dnl# LibAST macros for standard checks
  248. dnl#
  249. AC_DEFUN([AST_STD_CHECKS], [
  250.     AC_PROG_CPP
  251.  
  252.     dnl# These must be run after AC_PROG_CC but before any other macros that use
  253.     dnl# the C compiler
  254.     AC_AIX
  255.     AC_ISC_POSIX
  256.     AC_MINIX
  257.  
  258.     dnl# At least make the attempt to support CygWin32
  259.     AC_CYGWIN
  260.     AC_ARG_PROGRAM
  261.  
  262.     AM_PROG_LIBTOOL
  263.  
  264.     AC_GCC_TRADITIONAL
  265.  
  266.     AC_PROG_INSTALL
  267.  
  268.     ASFLAGS="$ASFLAGS -I../"
  269.     AS=$CC
  270.     AC_SUBST(ASFLAGS)
  271.     AC_SUBST(AS)
  272.  
  273.     dnl# Check for host system type
  274.     AC_CANONICAL_HOST
  275.  
  276.     dnl# Check the sanity of what we've done so far
  277.     AM_SANITY_CHECK
  278.  
  279.     dnl# Most people don't want the developer-only clutter
  280.     AM_MAINTAINER_MODE
  281.  
  282.     dnl# If it's there, what the hell?
  283.     AM_WITH_DMALLOC
  284. ])
  285. AC_DEFUN([AST_PROG_CHECKS], [
  286.     AC_CHECK_PROG(SED, sed, sed, false)
  287.     AC_CHECK_PROG(RM, rm, rm, true)
  288.     AC_CHECK_PROG(CP, cp, cp, false)
  289.     AC_CHECK_PROG(CHMOD, chmod, chmod, true)
  290.     AC_CHECK_PROG(TAR, tar, tar, tar)
  291.     AC_CHECK_PROG(MKDIR, mkdir, mkdir, false)
  292.     AC_CHECK_PROG(CTAGS, ctags, ctags, true)
  293.     AC_CHECK_PROG(AR, ar, ar, false)
  294.     AC_CHECK_PROG(MV, mv, mv, true)
  295.     AC_LN_S
  296. ])
  297. AC_DEFUN([AST_VAR_CHECKS], [
  298.     AC_CHECK_SIZEOF(char, 1)
  299.     AC_CHECK_SIZEOF(short, 2)
  300.     AC_CHECK_SIZEOF(int, 4)
  301.     AC_CHECK_SIZEOF(long, 4)
  302.     AC_CHECK_SIZEOF(long long, 8)
  303.     AC_C_BIGENDIAN
  304.  
  305.     AST_SIZE_TYPE(8)
  306.     AC_SUBST(INT_8_TYPE)
  307.     AST_SIZE_TYPE(16)
  308.     AC_SUBST(INT_16_TYPE)
  309.     AST_SIZE_TYPE(32)
  310.     AC_SUBST(INT_32_TYPE)
  311.     AST_SIZE_TYPE(64)
  312.     AC_SUBST(INT_64_TYPE)
  313.  
  314.     AC_C_CONST
  315.     AC_C_INLINE
  316. ])
  317. AC_DEFUN([AST_HEADER_CHECKS], [
  318.     AC_HEADER_SYS_WAIT
  319.     AC_CHECK_HEADERS(fcntl.h termios.h sys/ioctl.h sys/select.h sys/time.h \
  320.                      sys/sockio.h sys/byteorder.h malloc.h utmpx.h unistd.h \
  321.                      bsd/signal.h stdarg.h errno.h)
  322.     AC_HEADER_TIME
  323. ])
  324. AC_DEFUN([AST_FUNC_CHECKS], [
  325.     AC_TYPE_SIGNAL
  326.     AC_CHECK_FUNCS(memmove putenv strsep memmem usleep snprintf vsnprintf \
  327.                    strcasestr strcasechr strcasepbrk strrev strnlen)
  328.     AC_SEARCH_LIBS(hstrerror, resolv)
  329.     dps_snprintf_oflow()
  330.     dps_vsnprintf_oflow()
  331.     dps_symlink_open_bug()
  332.     dps_rlimit_nproc()
  333.     dps_rlimit_memlock()
  334. ])
  335. AC_DEFUN([AST_TYPE_CHECKS], [
  336.     AC_TYPE_MODE_T
  337.     AC_CHECK_TYPE(off_t, long)
  338.     AC_TYPE_PID_T
  339.     AC_TYPE_UID_T
  340. ])
  341.  
  342. dnl#
  343. dnl# LibAST argument macros
  344. dnl#    - arg 1 is the name of the env var to use
  345. dnl#
  346. AC_DEFUN([AST_ARG_DEBUG], [
  347.     AC_MSG_CHECKING(for debugging level)
  348.     AC_ARG_WITH(debugging, [  --with-debugging[=num]  compile in debugging support.  num >= 0], [
  349.                     if test "$withval" = "yes"; then
  350.                         withval=4
  351.                     fi
  352.                     if test "$withval" != "no"; then 
  353.                         AC_MSG_RESULT($withval)
  354.                         AC_DEFINE_UNQUOTED($1, $withval, [Specify level of debugging to compile in.])
  355.                         $1=$withval
  356.                     else
  357.                         AC_MSG_RESULT(no, disabling all debugging support)
  358.                         AC_DEFINE_UNQUOTED($1, 0, [Specify level of debugging to compile in.])
  359.                         $1=0
  360.                     fi
  361.                 ], [
  362.                     AC_MSG_RESULT(4)
  363.                     AC_DEFINE_UNQUOTED($1, 4, [Specify level of debugging to compile in.])
  364.                     $1=4
  365.     ])
  366. ])
  367. AC_DEFUN([AST_ARG_REGEXP], [
  368.     AC_ARG_WITH(regexp,
  369.     [  --with-regexp[=TYPE]  specify the type of regular expression support (bsd, posix, pcre)],
  370.     [$1=$withval], [$1=yes])
  371.     AST_REGEXP_SUPPORT($1)
  372.     AC_MSG_CHECKING(for regular expression support)
  373.     AC_MSG_RESULT(${$1})
  374. ])
  375. AC_DEFUN([AST_ARG_BACKQUOTE_EXEC], [
  376.     AC_MSG_CHECKING(if backquote execution support should be enabled)
  377.     AC_ARG_WITH(backquote-exec,
  378.         [  --without-backquote-exec   disables the execution of commands from inside config files],
  379.         [
  380.             if test "$withval" = "no"; then
  381.                 AC_MSG_RESULT(no)
  382.                 $1=no
  383.             else
  384.                 AC_MSG_RESULT(yes)
  385.                 AC_DEFINE($1, 1, [Define for backquote execution.])
  386.                 $1=yes
  387.             fi
  388.         ], [
  389.             AC_MSG_RESULT(yes)
  390.             AC_DEFINE($1, 1, [Define for backquote execution.])
  391.             $1=yes
  392.         ])
  393. ])
  394.  
  395. dnl#
  396. dnl# LibAST macro for flag post-processing
  397. dnl#
  398. AC_DEFUN([AST_FLAGS], [
  399.     CPPFLAGS=`eval eval eval eval eval echo "-I$includedir -I$prefix/include $CPPFLAGS"`
  400.     CPPFLAGS=`echo $CPPFLAGS | tr ' ' '\n' | uniq | grep -v NONE | tr '\n' ' '`
  401.     CFLAGS=${CFLAGS--O}
  402.     LDFLAGS=`eval eval eval eval eval echo "-L$libdir -L$prefix/lib ${LDFLAGS--O}"`
  403.     LDFLAGS=`echo $LDFLAGS | tr ' ' '\n' | uniq | grep -v NONE | tr '\n' ' '`
  404.     LIBS="$GRLIBS $X_PRE_LIBS $LIBS $X_EXTRA_LIBS"
  405. ])
  406.  
  407. dnl#
  408. dnl# LibAST macro for final status report
  409. dnl#
  410. AC_DEFUN([AST_STATUS], [
  411.     echo ""
  412.     echo "$PACKAGE $VERSION"
  413.     echo "Configuration:"
  414.     echo "--------------"
  415.     echo ""
  416.     echo "  Source code location:    $srcdir"
  417.     echo "  Host System Type:        $host"
  418.     echo "  Preprocessor:            $CC $CPPFLAGS"
  419.     echo "  Compiler:                $CC $CFLAGS"
  420.     echo "  Linker:                  $CC $LDFLAGS $LIBS"
  421.     echo "  Install path:            $prefix"
  422.     echo ""
  423.     echo "Now type 'make' to build $PACKAGE $VERSION."
  424.     echo ""
  425. ])
  426.  
  427. dnl###########################################################################
  428.  
  429. dnl#
  430. dnl# acl.m4 -- Written by Duncan Simpson <dps@io.stargate.co.uk>
  431. dnl# Posted to BUGTRAQ on 17 June 1999
  432. dnl# Used by encouragement. :-)
  433. dnl#
  434.  
  435. dnl Check snprintf for overrun potential
  436. AC_DEFUN([dps_snprintf_oflow], [
  437.     AC_MSG_CHECKING(whether snprintf ignores n)
  438.     AC_CACHE_VAL(dps_cv_snprintf_bug, [
  439.         AC_TRY_RUN(
  440.             changequote(<<, >>)dnl
  441. <<#include <stdio.h>
  442.  
  443. #ifndef HAVE_SNPRINTF
  444. #include "src/snprintf.c"
  445. #endif /* HAVE_SNPRINTF */
  446.  
  447. int main(void)
  448. {
  449. char ovbuf[7];
  450. int i;
  451. for (i=0; i<7; i++) ovbuf[i]='x';
  452. snprintf(ovbuf, 4,"foo%s", "bar");
  453. if (ovbuf[5]!='x') exit(1);
  454. snprintf(ovbuf, 4,"foo%d", 666);
  455. if (ovbuf[5]!='x') exit(1);
  456. exit(0);
  457. } >>
  458.             changequote([, ])
  459.         , dps_cv_snprintf_bug=0, dps_cv_snprintf_bug=1, dps_cv_snprintf_bug=2)
  460.     ])
  461.     if test $dps_cv_snprintf_bug -eq 0; then
  462.         AC_MSG_RESULT([no, snprintf is ok])
  463.     elif test $dps_cv_snprint_bug -eq 1; then
  464.         AC_MSG_RESULT([yes, snprintf is broken])
  465.         AC_DEFINE(HAVE_SNPRINTF_BUG, 1, [Defined if libc snprintf is buggy.])
  466.     else
  467.         AC_MSG_RESULT([unknown, assuming yes])
  468.         AC_DEFINE(HAVE_SNPRINTF_BUG, 1, [Defined if libc snprintf is buggy.])
  469.     fi
  470. ])
  471.  
  472. dnl Check vsnprintf for overrun potential
  473. AC_DEFUN([dps_vsnprintf_oflow], [
  474.     AC_MSG_CHECKING(whether vsnprintf ignores n)
  475.     AC_CACHE_VAL(dps_cv_vsnprintf_bug, [
  476.         AC_TRY_RUN(
  477.             changequote(<<, >>)dnl
  478. <<#include <stdio.h>
  479. #include <stdarg.h>
  480.  
  481. #ifndef HAVE_VSNPRINTF
  482. #include "src/snprintf.c"
  483. #endif /* HAVE_VSNPRINTF */
  484.  
  485. int prnt(char *s, const char *fmt, ...)
  486. {
  487.   va_list argp;
  488.   va_start(argp, fmt);
  489.   vsnprintf(s, 4, fmt, argp);
  490.   va_end(argp);
  491. }
  492.  
  493. int main(void)
  494. {
  495.   char ovbuf[8] = "xxxxxxx";
  496.   int i;
  497.   prnt(ovbuf, "foo%s", "bar");
  498.   if (ovbuf[5]!='x') {fprintf(stderr, "buffer:  %s\n", ovbuf); exit(1);}
  499.   prnt(ovbuf, "foo%d", 666);
  500.   if (ovbuf[5]!='x') {fprintf(stderr, "buffer:  %s\n", ovbuf); exit(1);}
  501.   exit(0);
  502. } >>
  503.             changequote([, ])
  504.         , dps_cv_vsnprintf_bug=0, dps_cv_vsnprintf_bug=1, dps_cv_vsnprintf_bug=2)
  505.     ])
  506.  
  507.     if test $dps_cv_vsnprintf_bug -eq 0; then
  508.         AC_MSG_RESULT([no, vsnprintf is ok])
  509.     elif test $dps_cv_vsnprintf_bug -eq 1; then
  510.         AC_MSG_RESULT([yes, vsnprintf is broken])
  511.         AC_DEFINE(HAVE_VSNPRINTF_BUG,1, [Defined if libc vsnprintf is buggy.])
  512.     else
  513.         AC_MSG_RESULT([unknown, assuming yes])
  514.         AC_DEFINE(HAVE_VSNPRINTF_BUG,1, [Defined if libc vsnprintf is buggy.])
  515.     fi
  516. ])
  517.  
  518. dnl open and symlink interaction bug test
  519. AC_DEFUN([dps_symlink_open_bug], [
  520.     AC_MSG_CHECKING(security of interaction between symlink and open)
  521.     AC_CACHE_VAL(dps_cv_symlink_open_bug, [
  522.         mkdir conftest.d
  523.         AC_TRY_RUN(
  524.             changequote(<<, >>)dnl
  525. <<#include <stdio.h>
  526. #ifdef HAVE_STDLIB_H
  527. #include <stdlib.h>
  528. #endif
  529. #ifdef HAVE_SYS_TYPES_H
  530. #include <sys/types.h>
  531. #endif
  532. #ifdef HAVE_SYS_STAT_H
  533. #include <sys/stat.h>
  534. #endif
  535. #ifdef HAVE_FCNTL_H
  536. #include <fcntl.h>
  537. #endif
  538. #ifdef HAVE_UNISTD_H
  539. #include <unistd.h>
  540. #endif
  541. #ifdef HAVE_ERRNO_H
  542. #include <errno.h>
  543. #else
  544. extern int errno;
  545. #endif
  546.  
  547. int main(void)
  548. {
  549.   int fd;
  550.   if (chdir("conftest.d")!=0)
  551.     exit(1);
  552.   if (symlink("foo","bar")!=0)
  553.     exit(1);
  554.   if ((fd=open("bar", O_CREAT | O_EXCL | O_WRONLY, 0700))==0)
  555.   {
  556.         write(fd, "If the symlink was to .rhosts you would be unhappy", 50);
  557.     close(fd);
  558.     exit(1);
  559.   }
  560.   if (errno!=EEXIST)
  561.     exit(1);
  562.   exit(0);
  563. } >>
  564.             changequote([, ])
  565.         ,
  566.         dps_cv_symlink_open_bug=0,
  567.         [
  568.             if test -r conftest.d/foo; then
  569.                 dps_cv_symlink_open_bug=2
  570.             else
  571.                 dps_cv_symlink_open_bug=1
  572.             fi
  573.         ],
  574.         dps_cv_symlink_open_buf=3)
  575.         rm -rf conftest.d
  576.     ])
  577.     case "$dps_cv_symlink_open_bug" in
  578.         0) AC_MSG_RESULT(secure) ;;
  579.         1) AC_MSG_RESULT(errno wrong but ok)
  580.            AC_DEFINE(HAVE_SYMLINK_OPEN_ERRNO_BUG, 1, [Defined if symlink open() errno is wrong but safe.]) ;;
  581.         2) AC_MSG_RESULT(insecure)
  582.            AC_DEFINE(HAVE_SYMLINK_OPEN_SECURITY_HOLE, 1, [Defined if symlink open() is a security risk.])
  583.            AC_DEFINE(HAVE_SYMLINK_OPEN_ERRNO_BUG, 1, [Defined if symlink open() is buggy.]) ;;
  584.         3) AC_MSG_RESULT(assuming insecure)
  585.            AC_DEFINE(HAVE_SYMLINK_OPEN_SECURITY_HOLE, 1, [Defined if symlink open() is a security risk.])
  586.            AC_DEFINE(HAVE_SYMLINK_OPEN_ERRNO_BUG, 1, [Defined if symlink open() is buggy.]) ;;
  587.         *) AC_MSG_RESULT($dps_cv_symlink_open_bug)
  588.            AC_MSG_ERROR(Impossible value of dps_cv_symlink_open_bug) ;;
  589.     esac
  590. ])
  591.  
  592. dnl Check to RLIMIT_NPROC resource limit
  593. AC_DEFUN([dps_rlimit_nproc], [
  594.     AC_MSG_CHECKING(for working RLIMIT_NPROC resource limit)
  595.     AC_CACHE_VAL(dps_cv_rlimit_nproc, [
  596.         AC_TRY_RUN(
  597.             changequote(<<, >>)dnl
  598. <<
  599. #ifndef HAVE_STDLIB_H
  600. #include <stdlib.h>
  601. #endif /* HAVE_STDLIB_H */
  602. #ifndef HAVE_SIGNAL_H
  603. #include <signal.h>
  604. #endif /* HAVE_SIGNAL_H */
  605. #ifdef HAVE_UNISTD_H
  606. #include <unistd.h>
  607. #endif /* HAVE_UNISTD_H */
  608. #ifdef HAVE_SYS_RESOURCE_H
  609. #include <sys/resource.h>
  610. #endif /* HAVE_SYS_RESOURCE_H */
  611.  
  612. int main(void)
  613. {
  614. #ifdef RLIMIT_NPROC
  615.     static const struct rlimit pid_lim={RLIMIT_NPROC, 1};
  616.     pid_t f;
  617.  
  618.     signal(SIGCHLD, SIG_IGN);
  619.     setrlimit(RLIMIT_NPROC, (struct rlimit *) &pid_lim);
  620.     if ((f=fork())==0)
  621.     exit(0);
  622.     if (f==-1)
  623.     exit(0); /* The fork() failed (the right thing) */
  624. #endif
  625.    exit(1);
  626. } >>
  627.             changequote([, ])
  628.         , dps_cv_rlimit_nproc=0, dps_cv_rlimit_nproc=1, dps_cv_rlimit_nproc=2)
  629.     ])
  630.     if test $dps_cv_rlimit_nproc -eq 0; then
  631.         AC_MSG_RESULT([yes])
  632.         AC_DEFINE(HAVE_RLIMIT_NPROC, 1, [Defined if the RLIMIT_NPROC resource limit works.])
  633.     elif test $dps_cv_rlimit_nproc -eq 1; then
  634.         AC_MSG_RESULT([no])
  635.     else
  636.         AC_MSG_RESULT([unknown, assuming none])
  637.     fi
  638. ])
  639.  
  640. dnl Check to RLIMIT_MEMLOCK resource limit
  641. AC_DEFUN([dps_rlimit_memlock], [
  642.     AC_MSG_CHECKING(for working RLIMIT_MEMLOCK resource limit)
  643.     AC_CACHE_VAL(dps_cv_rlimit_memlock, [
  644.         AC_TRY_RUN(
  645.             changequote(<<, >>)dnl
  646. <<
  647. #ifndef HAVE_STDLIB_H
  648. #include <stdlib.h>
  649. #endif /* HAVE_STDLIB_H */
  650. #ifndef HAVE_SIGNAL_H
  651. #include <signal.h>
  652. #endif /* HAVE_SIGNAL_H */
  653. #ifdef HAVE_UNISTD_H
  654. #include <unistd.h>
  655. #endif /* HAVE_UNISTD_H */
  656. #ifdef HAVE_SYS_RESOURCE_H
  657. #include <sys/resource.h>
  658. #endif /* HAVE_SYS_RESOURCE_H */
  659. #ifdef HAVE_SYS_MMAN
  660. #include <sys/mman.h>
  661. #endif /* HAVE_SYS_MMAN */
  662. #ifdef HAVE_ERRNO_H
  663. #include <errno.h>
  664. #endif /* HAVE_ERRNO_H */
  665.  
  666. int main(void)
  667. {
  668. #ifdef RLIMIT_MEMLOCK
  669.     static const struct rlimit mlock_lim={RLIMIT_MEMLOCK, 0};
  670.     void *memory;
  671.  
  672.     if (setrlimit(RLIMIT_MEMLOCK, (struct rlimit *) &mlock_lim)!=-1)
  673.     exit(0);
  674. #endif
  675. exit(1);
  676. } >>
  677.             changequote([, ])
  678.         , dps_cv_rlimit_memlock=0, dps_cv_rlimit_memlock=1, dps_cv_rlimit_memlock=2)
  679.     ])
  680.     if test $dps_cv_rlimit_memlock -eq 0; then
  681.         AC_MSG_RESULT([yes])
  682.         AC_DEFINE(HAVE_RLIMIT_MEMLOCK,1, [Defined if the RLIMIT_MEMLOCK resource limit works.])
  683.     elif test $dps_cv_rlimit_memlock -eq 1; then
  684.         AC_MSG_RESULT([no])
  685.     else
  686.         AC_MSG_RESULT([unknown, assuming none])
  687.     fi
  688. ])
  689.